package com.zzyl.service.impl;

import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.zzyl.base.PageBean;
import com.zzyl.dto.DeviceDataPageReqDto;
import com.zzyl.dto.QueryDeviceDataDto;
import com.zzyl.entity.DeviceData;
import com.zzyl.mapper.DeviceDataMapper;
import com.zzyl.service.DeviceDataService;
import com.zzyl.vo.DeviceDataGraphVo;
import com.zzyl.vo.DeviceDataVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class DeviceDataServiceImpl implements DeviceDataService {

    @Resource
    private DeviceDataMapper deviceDataMapper;

    /**
     * 按条件分页查询设备数据
     *
     * @param dto 设备数据查询参数
     * @return 设备数据列表
     */
    @Override
    public PageBean<DeviceData> pageQueryDeviceData(DeviceDataPageReqDto dto) {
//        1.设置分页参数
        PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
        //前端传递的时间是一个long类型的毫秒值，作为条件查询数据库需要转换为日期类型
        Long startTime = dto.getStartTime();
        Long endTime = dto.getEndTime();

        dto.setStartDate(ObjectUtil.isEmpty(startTime) ? null : LocalDateTimeUtil.of(startTime));
        dto.setEndDate(ObjectUtil.isEmpty(endTime) ? null : LocalDateTimeUtil.of(endTime));
        Page<DeviceDataVo> page = deviceDataMapper.selectByPage(dto);

        return PageBean.of(page,DeviceData.class);
    }

    /**
     * 查询指定天的设备数据
     *
     * @param dto 查询参数
     * @return 设备数据列表
     */
    @Override
    public List<DeviceDataGraphVo> queryDeviceDataListByDay(QueryDeviceDataDto dto) {
        dto.setStartDate(LocalDateTimeUtil.of(dto.getStartTime()));
        dto.setEndDate(LocalDateTimeUtil.of(dto.getEndTime()));
        return deviceDataMapper.queryDeviceDataListByDay(dto);
    }

    /**
     * 查询指定周的设备数据
     *
     * @param dto 查询参数
     * @return 设备数据列表
     */
    @Override
    public List<DeviceDataGraphVo> queryDeviceDataListByWeek(QueryDeviceDataDto dto) {
        dto.setStartDate(LocalDateTimeUtil.of(dto.getStartTime()));
        dto.setEndDate(LocalDateTimeUtil.of(dto.getEndTime()));
        return deviceDataMapper.queryDeviceDataListByWeek(dto);
    }
}
